package cn.trinea.android.demo;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import cn.trinea.android.demo.utils.AppUtils;
import com.google.analytics.tracking.android.EasyTracker;
/**
* ViewPager implements gallery effect
*
* @author <a href="http://www.trinea.cn/android/viewpager-multi-fragment-effect/" target="_blank">Trinea</a> 2013-04-03
*/
public class ViewPagerMulTiFragmentDemo extends BaseActivity {
private static int TOTAL_COUNT = 3;
private RelativeLayout viewPagerContainer;
private ViewPager viewPager;
private TextView indexText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState, R.layout.view_pager_multi_fragment_demo);
viewPager = (ViewPager)findViewById(R.id.view_pager);
indexText = (TextView)findViewById(R.id.view_pager_index);
viewPagerContainer = (RelativeLayout)findViewById(R.id.pager_layout);
viewPager.setAdapter(new MyPagerAdapter());
// to cache all page, or we will see the right item delayed
viewPager.setOffscreenPageLimit(TOTAL_COUNT);
viewPager.setPageMargin(getResources().getDimensionPixelSize(R.dimen.page_margin));
viewPager.setOnPageChangeListener(new MyOnPageChangeListener());
viewPagerContainer.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// dispatch the events to the ViewPager, to solve the problem that we can swipe only the middle view.
return viewPager.dispatchTouchEvent(event);
}
});
indexText.setText(new StringBuilder().append("1/").append(TOTAL_COUNT));
}
/**
* this is a example fragment, just a imageview, u can replace it with your needs
*
* @author Trinea 2013-04-03
*/
class MyPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return TOTAL_COUNT;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return (view == object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = new ImageView(ViewPagerMulTiFragmentDemo.this);
imageView.setImageResource(R.drawable.image1 + position);
((ViewPager)container).addView(imageView, position);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager)container).removeView((ImageView)object);
}
}
public class MyOnPageChangeListener implements OnPageChangeListener {
@Override
public void onPageSelected(int position) {
indexText.setText(new StringBuilder().append(position + 1).append("/").append(TOTAL_COUNT));
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// to refresh frameLayout
if (viewPagerContainer != null) {
viewPagerContainer.invalidate();
}
}
@Override
public void onPageScrollStateChanged(int arg0) {}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home: {
onBackPressed();
return true;
}
case R.id.github: {
AppUtils.urlOpen(context, getString(R.string.github_trinea));
return true;
}
}
return false;
}
@Override
protected void onStart() {
super.onStart();
EasyTracker.getInstance(this).activityStart(this);
}
@Override
protected void onStop() {
super.onStop();
EasyTracker.getInstance(this).activityStop(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}